perm filename PLOT3.FAI[NEW,LCS]6 blob
sn#506168 filedate 1980-04-26 generic text, type T, neo UTF8
TITLE PLOT
INTERNAL PLOT,VARIAN
EXTERNAL EXTOUT,FINEXT,EXIT,PUTEXT,OUTF,TTOP,DL
;; COMMON /DL/RSIZ,SAVER,NAME,EXT
LX: 0
N: BLOCK =512
VARIAN: 0
JRA 16,(16) ;DUMMY ROUTINE. SEE PLOT4.FAI (MPV.DMP)
PLOT: 0 ;SUBROUTINE PLOT(I,J,K)
SETO 4, ;COMMON /OUTF/JJ,KKK,KNT
CAMN 4,OUTF ;DIMENSION N(148)
JRST PL4 ;IF(JJ.EQ.-1)GO TO 4
MOVNM 4,LX ;L=1
SETZM OUTF+2 ;VECTOR COUNTER (TEMPORARY, I HOPE)
MOVEI 4,=50000
MOVEM 4,TTOP+1 ;INITIALIZE JBOT AND JTOP
MOVNM 4,TTOP ;JBOT=50000, JTOP=-50000
MOVNM 4,RTMAX# ;RTMX=-50000
MOVEM 4,X1# ;INIT OLD X AND Y
MOVEM 5,Y1#
MOVE 4,DL ;MOVEI 4,=127 ;N(1)=127
FMPR 4,[1000.0] ;SAVE SIZE FACTOR*1000 IN FIRST WORD.
KIFIX 4,4 ;WILL BE USED BY SEGMENT SYSTEM.
MOVEM 4,N
MOVE 4,[ASCIZ/" "/] ;IF(JJ.EQ.' ')JJ='PLT'
CAME 4,OUTF
JRST PLB ;WRITES FILE WITH .PLT EXTENSION.
MOVE 4,[ASCIZ/"PLT"/]
MOVEM 4,OUTF
PLB: JSA 16,PUTEXT ;CALL PUTEXT(JJ,'PLT')
JUMP OUTF
JUMP [ASCIZ/PLT/]
SETOM OUTF ;JJ=-1
PL4: MOVE 5,@2(16) ;4 IF(K.EQ.99)GO TO 1
CAIN 5,=99
JRST PL1
MOVE 4,@(16) ;IF(X2.EQ.X1.AND.Y2.EQ.Y1)RETURN
MOVE 5,@1(16) ;AVOID DUPLICATE COORDS.
CAMN 4,X1
CAME 5,Y1
JRST DIFRNT
SKIPL @2(16) ;SKIP IF -3 IN PEN CODE
JRA 16,3(16) ;RETURN
DIFRNT: MOVEM 4,X1
MOVEM 5,Y1 ;SAVE X AND Y FOR NEXT TIME
AOS 7,LX ;L=L+1
CAIL 7,=129 ;WILL PUT OUT WDCNT EVERY 128 WDS.
JRST [ CAIL 7,=257
JRST TOP
CAIE 7,=129
JRST NOWD
WWD: MOVEI 4,=127
MOVEM 4,N-1(7) ;N(L)=127
AOS LX
JRST NOWD
TOP: CAIL 7,=385
JRST TOP2
CAIE 7,=257
JRST NOWD
JRST WWD
TOP2: CAIN 7,=385
JRST WWD
JRST NOWD]
;;NOWD: MOVN 5,@1(16) ;ROTATE (FOR IRCAM)
;; MOVEM 5,XTOP#
;; MOVEM 5,@1(16)
NOWD: MOVEI 7,N
ADD 7,LX ;CALL PAC(N(L),I)[SEE MSFAI.FAI]
HRRZ 4,2(16)
HRR 5,@4
LSHC 5,-10
HRRZ 4,1(16)
HRR 5,@4
LSHC 5,-16
HRRZ 4,(16)
HRR 5,@4
LSHC 5,-16
MOVEM 6,-1(7)
MOVEM 6,LASTPK# ;SAVE LAST PACKED FOR END OF DATA
AOS OUTF+2 ;UPDATE VECT. COUNTER
NZZ: MOVE 1,@1(16);****ALL THIS TO FIND TRUE VERTICAL SIZE OF IMAGE.
;;NZZ: MOVE 1,XTOP ;@1(16);****ALL THIS TO FIND TRUE VERTICAL SIZE OF IMAGE.
MOVEI 0,2 ;****
CAME 0,@2(16) ;**** IS PEN DOWN (=2)?
JRST NXX ;**** NO
CAMLE 1,TTOP ;**** GETS Y COORD.
MOVEM 1,TTOP ;****
CAMGE 1,TTOP+1 ;**** THIS AREA SAVES TOP AND BOT LIMITS
MOVEM 1,TTOP+1 ;****
MOVE 1,INVIS ;****
CAMLE 1,TTOP ;****
MOVEM 1,TTOP ;**** THIS TO AVOID INCLUDING 1ST AND LAST
CAMGE 1,TTOP+1 ;**** INVISIBILE POSITIONS.
MOVEM 1,TTOP+1 ;****
MOVE 1,@(16) ; GET X COORD.
CAMLE 1,RTMAX ; IS THIS FURTHER TO RIGHT?
MOVEM 1,RTMAX ;YES WRITE THIS AS LAST WD. OF FILE
JRST NWW ;****
;;NXX: MOVE 1,@1(16) ;**** SAVE THE Y COORD. WHEN INVIS.
NXX: MOVEM 1,INVIS# ;****
SKIPL @2(16) ;**** SKIP IF PEN=-3 (RESETS TO 0,0)
JRST NWW ;****
MOVN 1,@1(16) ;**** GET Y FOR PEN RESET
ADDM 1,TTOP ;**** SUBTRACT NEW POS. FROM BOTH TOP AND BOT
ADDM 1,TTOP+1 ;****
NWW: MOVE 7,LX
CAIGE 7,=512 ;3 IF(L.LT.512)RETURN
JRA 16,3(16)
JSA 16,EXTOUT ;2 CALL EXTOUT(N,512)
JUMP N
JUMP [=512]
MOVEI 177 ;N(1)=127 RESET BASIC WDCNT, WIPE OUT SIZE*1000
MOVEM N
MOVEI 7,1 ;L=1
MOVEM 7,LX
JRA 16,3(16) ;RETURN
PL1: MOVE 4,LX
CAIN 4,[=512] ;IF EXACTLY 512, JUMP TO FASTOUT
JRST PLEND
IDIVI 4,=128 ;JJJ=L/128
IMULI 4,=128 ;JJJJ=JJJ*128
MOVE 7,4 ;AC5 HAS REMAINDER
SOJ 5, ;LESS 1, BECAUSE 128 UNIT IS WDCNT+127
MOVEM 5,N(7) ;FOUND LAST WDCNT.
ADDI 4,=128 ; END OF NEXT LOOP
MOVE 6,LX
SKIPN 5
AOJ 6, ;IF ON WDCNT NUM.(AC5=0), ADD 1
MOVE 7,LASTPK
;;COULD GET BAD DATA IF EXACT 128 WDS. MOVE 7,N-1(5) ;J=N(L)
AOJ 6, ; (L=L+1)
PL100: MOVEM 7,N-1(6) ;DO 100 JJ=L,JXXX (AC4)
;100 N(JJ)=J
CAMGE 6,4
AOJA 6,PL100
PLEND: MOVE 1,RTMAX ; FARTHEST RIGHT POINT.
MOVEM 1,N+=511 ; PUT IN LAST WD OF FILE.
JSA 16,EXTOUT ;CALL EXTOUT(N,512)
JUMP N
JUMP 4
JSA 16,FINEXT ;CALL FINEXT
SETZM OUTF ;JJ=0
JSA 16,EXIT ;CALL EXIT
END